package com.karry.mapper;

import com.karry.pojo.User;
import org.apache.ibatis.annotations.*;

import java.util.ArrayList;

public interface UserMapper {

    /**
     *
     * @param name  用户名或者邮箱
     * @param pwd   用户密码
     * @return      对应用户名与密码的账户
     *
     * 主要用于登录（验证账号密码以及是否删除账号）
     */
    @Select("select * from tb_user where (u_name = #{name} or u_email = #{name}) and u_pwd = #{pwd} and u_status = 1;")
    @ResultMap("userResultMap")
    User userSearchBYNameAndPwd(@Param("name") String name, @Param("pwd") String pwd);


    /**
     *
     * @param name  用户名(邮箱)
     * @return      对应用户名账户
     *
     * 主要用于注册判断（判断账号（邮箱）是否重复） 注：此处无需判断账号是否删除，无论是否删除都不允许重复
     */
    @Select("select * from tb_user where u_name = #{name} or u_email = #{name};")
    @ResultMap("userResultMap")
    User userSearchByName(@Param("name") String name);


    /**
     *
     * @param id    id
     * @return      对应用户名账户
     *
     * 主要用于通过id获取用户信息
     */
    @Select("select * from tb_user where u_id = #{id};")
    @ResultMap("userResultMap")
    User userSearchByID(@Param("id") int id);

    /**
     *
     * @param email  用户邮箱
     * @return      对应用户名账户
     *
     * 主要用于注册判断（判断邮箱是否重复） 注：此处无需判断账号是否删除，无论是否删除都不允许重复
     */
    @Select("select * from tb_user where u_email = #{email};")
    @ResultMap("userResultMap")
    User userSearchByEmail(@Param("email") String email);

    /**
     *
     *
     * 注册账户
     */
    //@Insert("insert into tb_user (u_name, u_pwd, u_email, u_nick) values (#{name}, #{pwd}, #{email}, #{nick});")
    //int userInsert(@Param("name") String name, @Param("pwd") String pwd, @Param("email") String email, @Param("nick") String nick);
    int userInsert(@Param("user") User user);


    /**
     *  通过昵称查询用户，用于判断昵称是否重复
     * */
    @Select("select * from tb_user where u_nick = #{nick} and u_id != #{id};")
    @ResultMap("userResultMap")
    User userSearchByNick(@Param("nick") String nick, @Param("id") int id);

    /**
     *  普通修改密码
     * */
    @Update("update tb_user set u_pwd = #{pwd} where u_id = #{id};")
    int updatePwd(@Param("id") int id, @Param("pwd") String pwd);

    /**
     *  修改用户普通信息，昵称，头像，心情
     * */
    @Update("update tb_user set u_nick = #{nick}, u_mood = #{mood}, u_head = #{head} where u_id = #{id};")
    int updateUser(@Param("id") int id, @Param("nick") String nick, @Param("mood") String mood, @Param("head") String head);

    /**
     *  修改用户邮箱
     * */
    @Update("update tb_user set u_email = #{email} where u_id = #{id};")
    int updateEmail(@Param("id") int id, @Param("email") String email);

    /**
     *  通过邮箱找回密码
     * */
    @Update("update tb_user set u_pwd = #{pwd} where u_email = #{email};")
    int updatePwdByEmail(@Param("email") String email, @Param("pwd") String pwd);

    @Update("update tb_user set u_last_login_ip = #{ip}, u_last_login_time = default where u_id = #{id};")
    void updateLoginInfo(@Param("id") int id, @Param("ip") String ip);

    @Select("select * from tb_user;")
    @ResultMap("userResultMap")
    ArrayList<User> getAllUserList();

    @Select("select count(*) from tb_user;")
    int getUserCount();

    @Select("select * from tb_user limit #{i}, 10;")
    @ResultMap("userResultMap")
    ArrayList<User> getUserListByPage(int i);

    //逻辑删除
    @Update("update tb_user set u_status = 0 where u_id = #{id};")
    int deleteUser(int id);

    //逻辑恢复或者解封
    @Update("update tb_user set u_status = 1 where u_id = #{id};")
    int liveUser(int id);

    //封禁账号
    @Update("update tb_user set u_status = 2 where u_id = #{arg0};")
    int closeUser(int id);


}
